package service

import (
	"common/global"
	"common/initialize"
	"context"
	"equipment_server/service/internal/logic"
	"log"
	"time"
)

// CleanHealthData 清理一年前的健康数据
func CleanHealthData() {
	// 计算一年前的时间
	oneYearAgo := time.Now().AddDate(-1, 0, 0)

	// 创建上下文
	ctx := context.Background()

	// 清理心率数据
	hrColl := global.MonGoDatabase.Collection("heart_rate")
	filterHR := map[string]interface{}{
		"timestamp": map[string]interface{}{
			"$lt": oneYearAgo,
		},
	}
	resultHR, err := hrColl.DeleteMany(ctx, filterHR)
	if err != nil {
		log.Printf("清理心率数据失败: %v\n", err)
	} else {
		log.Printf("成功清理 %d 条心率数据\n", resultHR.DeletedCount)
	}

	// 清理血压数据
	bpColl := global.MonGoDatabase.Collection("blood_pressure")
	filterBP := map[string]interface{}{
		"timestamp": map[string]interface{}{
			"$lt": oneYearAgo,
		},
	}
	resultBP, err := bpColl.DeleteMany(ctx, filterBP)
	if err != nil {
		log.Printf("清理血压数据失败: %v\n", err)
	} else {
		log.Printf("成功清理 %d 条血压数据\n", resultBP.DeletedCount)
	}
}

// SubscribeDeviceResponses 订阅设备响应的 MQTT 主题
func SubscribeDeviceResponses() {
	// 订阅设备响应的主题。使用 "+" 作为通配符，匹配所有设备ID
	topic := "device/+/responses" // 订阅所有设备的响应主题

	// 使用全局的 MQTT 客户端实例订阅主题，并设置 HandleDeviceResponse 作为回调函数
	mqttClient := initialize.InitMQTT()

	// 初始订阅
	token := mqttClient.Subscribe(topic, 1, logic.HandleDeviceResponse)
	token.Wait()

	if token.Error() != nil {
		log.Fatalf("订阅设备响应主题 %s 失败: %v", topic, token.Error())
	}

	log.Printf("成功订阅设备响应主题: %s", topic)
}
